﻿#pragma once

#include "Common.hpp"




// 单例模式
class CentralCache {
	public:
		// 协调多个 ThreadCache 的内存分配请求，避免不同实例间的资源竞争和数据不一致。
		static CentralCache* GetInstance() {
			return &_sInst;
		}

		// 获取一个非空的 span
		Span* GetOneSpan(SpanList& list, size_t byte_size);

		// 从中心缓存中获取一定数量的对象给 thread cache
		size_t FetchRangeObj(void*& start, void*& end, size_t batchNum, size_t size) ;

		// 将⼀定数量的对象释放到span跨度
		void ReleaseListToSpans(void* start, size_t byte_size);

	private:
		SpanList _spanLists[NFREELIST];

	private:
		// C++98，构造函数私有
		CentralCache(){}
		// C++11，禁止拷贝
		CentralCache(const CentralCache&) = delete;

		static CentralCache _sInst;
};